/** 日期格式化 */
Date.prototype.format = function (format) {
    var week = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
    var takeTime = ['上午', '下午'];
    /* 例如:format="YYYY-MM-dd; */
    var o = {
        'y+': this.getFullYear(), // 年
        'M+': this.getMonth() + 1, // 月
        'w+': week[this.getDay()], // 周
        't+': takeTime[this.getHours() < 12 ? 0 : 1], // 上午,下午
        'd+': this.getDate(), // 日
        'H+': this.getHours(), // 时
        'm+': this.getMinutes(), // 分
        's+': this.getSeconds() // 秒
    };

    if (/(y+)/.test(format)) {
        format = format.replace(RegExp.$1, (this.getFullYear() + "")
            .substr(4 - RegExp.$1.length));
    }
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(format)) {
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
                : ("00" + o[k]).substr(("" + o[k]).length));
        }
    }
    return format;
};

/** 金额计算-保持精度 */
var MoneyCalculate = {
    /**
     * 加法arg1 + arg2
     * @param {} arg1
     * @param {} arg2
     * @return {}
     */
    accAdd: function (arg1, arg2) {
        var r1, r2, m;
        try {
            r1 = arg1.toString().split(".")[1].length;
        } catch (e) {
            r1 = 0;
        }
        try {
            r2 = arg2.toString().split(".")[1].length;
        } catch (e) {
            r2 = 0;
        }
        m = Math.pow(10, Math.max(r1, r2));
        return (arg1 * m + arg2 * m) / m;
    },
    /**
     * 减法arg1 - arg2
     * @param {} arg1
     * @param {} arg2
     * @return {}
     */
    accSub: function (arg1, arg2) {
        var r1, r2, m, n;
        try {
            r1 = arg1.toString().split('.')[1].length;
        } catch (e) {
            r1 = 0;
        }
        try {
            r2 = arg2.toString().split(".")[1].length;
        } catch (e) {
            r2 = 0;
        }
        n = Math.max(r1, r2);
        m = Math.pow(10, n);
        return (Math.round(arg1 * m - arg2 * m) / m).toFixed(n);
    },
    /**
     * 乘法arg1 * arg2
     * @param {} arg1
     * @param {} arg2
     * @return {}
     */
    accMul: function (arg1, arg2) {
        var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
        try {
            m += s1.split(".")[1].length;
        } catch (e) {
        }
        try {
            m += s2.split(".")[1].length;
        } catch (e) {
        }
        return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
    },
    /**
     * 除法arg1 / arg2
     * @param {} arg1
     * @param {} arg2
     * @return {}
     */
    accDiv: function (arg1, arg2) {
        var t1, t2, r1, r2;
        try {
            t1 = arg1.toString().split('.')[1].length;
        } catch (e) {
            t1 = 0;
        }
        try {
            t2 = arg2.toString().split(".")[1].length;
        } catch (e) {
            t2 = 0;
        }
        r1 = Number(arg1.toString().replace(".", ""));
        r2 = Number(arg2.toString().replace(".", ""));
        return (r1 / r2) * Math.pow(10, t2 - t1);
    },
    /**
     * 比较两个数大小
     * 如果arg1 > arg2返回1
     * 如果arg1 < arg2返回-1
     * 如果arg1 = arg2返回0
     */
    compareTo: function (arg1, arg2) {
        var r1, r2, m, n;
        try {
            r1 = arg1.toString().split('.')[1].length;
        } catch (e) {
            r1 = 0;
        }
        try {
            r2 = arg2.toString().split(".")[1].length;
        } catch (e) {
            r2 = 0;
        }
        n = Math.max(r1, r2);
        m = Math.pow(10, n);
        var x = arg1 * m - arg2 * m;
        return x > 0 ? 1 : (x < 0 ? -1 : 0);
    }
};
